#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <cstdio>

void handler(int signum)
{
    printf("catch a sig: %d\n", signum);
}
 
int main()
{
    signal(SIGSEGV, handler);
    sleep(1);
    int *p = nullptr;
    *p = 100;
    
    while(1);
    return 0;
}
 
// void handler(int signum)
// {
//     printf("catch a sig: %d\n", signum);
// }
 
// int main()
// {
//     signal(8, handler);  // 8 SIGFPE
//     sleep(1);
//     int a = 10;
//     a /= 0;
 
//     while(true);
//     return 0;
// }


// long long count = 0;
 
// void handler(int signumber)
// {
//     std::cout << "count: " << count << std::endl;
//     exit(0);
// }
 
// int main()
// {
//     signal(SIGALRM, handler);
//     alarm(1);
//     while(true)
//     {
//         count++;
//     }
//     return 0;
// }




// int main()
// {
//     int count=0;
//     alarm(1);
//     while(true){
//         std::cout << "count : "<< count << std::endl;
//         count++;
//     }
//     return 0;
// }



// void handler(int signumber)
// {
//     std::cout << "我是: " << getpid() << ", 我获得了一个信号: " << signumber <<std::endl;
// }

// int main()
// {
//     signal(SIGABRT, handler);
//     while(true)
//     {
//         sleep(1);
//         abort();
//     }
// }




// int main()
// {
//     signal(2,handler);// 先对2号信号进行捕捉
//     // 每隔1s，自己给自己发送2号信号
//     while(true){
//         sleep(1);
//         raise(2);
//     }
// }


// int main()
// {
//     signal(SIGINT, handler);
//     while(true)
//     {
//         std::cout << "I'm a process, I am waiting signal! " << std::endl;
//         int n = kill(getpid(), 2);
//         sleep(1);        
//     }
//     return 0;
// }


// int main()
// {
//     std::cout << "我是进程: " << getpid() << std::endl;

//     signal(SIGINT,SIG_DFL); // 设置忽略信号的宏
//     while(true){
//         std::cout << "I am a process, I am waiting signal!" << std::endl;
//         sleep(1);
//     }
//     return 0;
// }

// int main()
// {
//     std::cout << "我是进程: " << getpid() << std::endl;

//     signal(SIGINT,SIG_IGN);
//     while(true){
//         std::cout << "I am a process, I am waiting signal!" << std::endl;
//         sleep(1);
//     }
//     return 0;
// }